class Vec2 {
  x = 0;
  y = 0;
  // TODO:　e.constructor = e
  constructor(e?, t?) {
    let n = this;
    this.x = isNaN(e) ? n.x : e;
    this.y = isNaN(t) ? n.y : t;
  }
  equalsTo(e) {
    let t = this;
    return t.x == e.x && t.y == e.y;
  }
  radian() {
    let e = this,
      t = 0;
    if (e.x == 0)
      e.y > 0
        ? (t = Math.PI / 2)
        : e.y < 0
        ? (t = (-1 * Math.PI) / 2)
        : e.y == 0 && (t = 0);
    else {
      t = Math.atan(e.y / e.x);
      if ((e.y <= 0 && e.x < 0) || (e.y >= 0 && e.x < 0)) t += Math.PI;
    }
    return t;
  }
  radian2PI() {
    let e = this,
      t = 0;
    return (
      e.x == 0
        ? e.y > 0
          ? (t = Math.PI / 2)
          : e.y < 0
          ? (t = (Math.PI / 2) * 3)
          : e.y == 0 && (t = 0)
        : ((t = Math.atan(e.y / e.x)),
          e.x < 0 && e.y > 0
            ? (t += Math.PI)
            : e.x < 0 && e.y < 0
            ? (t += Math.PI)
            : e.x > 0 && e.y < 0 && (t += Math.PI * 2)),
      t
    );
  }
  angle2PI() {
    let e = this;
    return e.radian2PI() * (180 / Math.PI);
  }
  angle() {
    let e = this;
    return e.radian() * (180 / Math.PI);
  }
  multiple(e) {
    let t = this;
    (t.x = t.x * e), (t.y = t.y * e);
  }
  multipleWith(t) {
    let n = this;
    return new Vec2(n.x * t, n.y * t);
  }
  multipleVec2(e) {
    let t = this;
    (t.x = t.x * e.x), (t.y = t.y * e.y);
  }
  multipleWithVec2(t) {
    let n = this;
    return new Vec2(n.x * t.x, n.y * t.y);
  }
  add(t) {
    let n = this;
    return new Vec2(n.x + t.x, n.y + t.y);
  }
  subtract(t) {
    let n = this;
    return new Vec2(n.x - t.x, n.y - t.y);
  }
  normalize() {
    let e = this,
      t = e.len();
    t > 0 && ((e.x = e.x / t), (e.y = e.y / t));
  }
  normalization() {
    let t = this,
      n = t.len(),
      r = 0,
      i = 0;
    return n > 0 && ((r = t.x / n), (i = t.y / n)), new Vec2(r, i);
  }
  len() {
    let e = this;
    return Math.sqrt(e.x * e.x + e.y * e.y);
  }
  distance(e) {
    let t = this;
    return Math.sqrt((t.x - e.x) * (t.x - e.x) + (t.y - e.y) * (t.y - e.y));
  }
  intersect(e) {
    let t = this;
    return e.y >= t.x && t.y >= e.x;
  }
  contains(e) {
    let t = this;
    return e >= t.x && e <= t.y;
  }
  clone() {
    let t = this;
    return new Vec2(t.x, t.y);
  }
  toString() {
    let e = this;
    return "[x:" + e.x + ",y:" + e.y + "]";
  }
}


export default Vec2